package com.gskj.gulimall.auth;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/***
 *  SpringSession 核心原理
 *  @EnableRedisHttpSession：导入RedisHttpSessionConfiguration
 *   1. 给容器中添加了一个组件。
 *      SessionRepository ==> RedisOperationsSessionRepository：redis操作Session，CRUD的封装类
 *   2. 放入 SessionRepositoryFilter==>Filter; session存储过滤器
 *      1. 创建时，从容器中获取到了 SessionRepository
 *      2. 原始的request,response被包装成了: SessionRepositoryRequestWrapper,SessionRepositoryResponseWrapper
 *      3. 以后取的session; request.getSession();
 *      4. 替换为 weapperRequest.getSession(); ==> 也就是从 SessionRepository中获取到的。
 *
 *      使用的是 装饰着模式
 *      存储在Redis中的session也是有index过期时间，springSession也实现了数据启动续期。
 */

@EnableRedisHttpSession // 整合redis作为 Session存储
@EnableFeignClients// 开启远程服务调用
@EnableDiscoveryClient// 开启服务注册发现
@SpringBootApplication
public class GulimallAuthServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallAuthServerApplication.class, args);
    }
}
